{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Advantage Actor Critic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "import gym\n",
    "from matplotlib import pyplot as plt\n",
    "from collections import deque\n",
    "import numpy as np\n",
    "\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n",
    "from torch.distributions import Categorical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Actor(nn.Module):\n",
    "    \"\"\"Some Information about ActorCritic\"\"\"\n",
    "    def __init__(self, state_size, action_size):\n",
    "        super(Actor, self).__init__()\n",
    "\n",
    "        self.model = nn.Sequential(\n",
    "            nn.Linear(state_size, 64),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(64, action_size)\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        return self.model(x)\n",
    "    \n",
    "class Critic(nn.Module):\n",
    "    \"\"\"Some Information about ActorCritic\"\"\"\n",
    "    def __init__(self, state_size):\n",
    "        super(Critic, self).__init__()\n",
    "\n",
    "        self.model = nn.Sequential(\n",
    "            nn.Linear(state_size, 64),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(64, 64),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(64, 1)\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        return self.model(x)\n",
    "\n",
    "class Memory:\n",
    "    def __init__(self):\n",
    "        self.log_probs = []\n",
    "        self.values = []\n",
    "        self.dones = []\n",
    "        self.rewards = []\n",
    "    \n",
    "    def add(self, log_prob, value, done, reward):\n",
    "        self.log_probs.append(log_prob)\n",
    "        self.values.append(value)\n",
    "        self.dones.append(done)\n",
    "        self.rewards.append(reward)\n",
    "    \n",
    "    def clear(self):\n",
    "        self.log_probs = []\n",
    "        self.values = []\n",
    "        self.dones = []\n",
    "        self.rewards = []\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.log_probs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "def update(mem, next_state):\n",
    "    q_values = []\n",
    "    \n",
    "    # Do not add this one as it's for the next state\n",
    "    running_reward = critic(torch.tensor(next_state).float().to(device))\n",
    "    \n",
    "    for reward, done in zip(reversed(mem.rewards), reversed(mem.dones)):\n",
    "        running_reward = (reward + gamma * running_reward) * (1-done)\n",
    "        \n",
    "        q_values.append(running_reward)\n",
    "    \n",
    "    q_values = torch.stack(q_values).to(device)\n",
    "    values = torch.stack(mem.values).to(device)\n",
    "    log_probs = torch.stack(mem.log_probs).to(device)\n",
    "    \n",
    "    advantage = q_values - values\n",
    "    \n",
    "    critic_loss = torch.pow(advantage, 2).mean()\n",
    "    actor_loss = (-log_probs * advantage).sum()\n",
    "    \n",
    "    critic_optim.zero_grad()\n",
    "    critic_loss.backward(retain_graph=True)\n",
    "    critic_optim.step()\n",
    "    \n",
    "    actor_optim.zero_grad()\n",
    "    actor_loss.backward(retain_graph=True)\n",
    "    actor_optim.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "env = gym.make(\"CartPole-v1\")\n",
    "# env = gym.make(\"LunarLander-v2\")\n",
    "\n",
    "\n",
    "state_space = env.observation_space.shape[0]\n",
    "action_space = env.action_space.n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "win_condition = 200\n",
    "\n",
    "num_episodes = 500\n",
    "bootstrap_len = 5\n",
    "\n",
    "gamma = 0.99"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "mem = Memory()\n",
    "\n",
    "actor = Actor(state_space, action_space).to(device)\n",
    "critic = Critic(state_space).to(device)\n",
    "\n",
    "actor_optim = optim.Adam(actor.parameters(), lr=1e-3)\n",
    "critic_optim = optim.Adam(critic.parameters(), lr=1e-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ubuntu/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:16: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  app.launch_new_instance()\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode: 0.0000\taverage: 41.0000\tReward: 41.0000\n",
      "Episode: 100.0000\taverage: 119.8400\tReward: 500.0000\n",
      "Episode: 127.0000\taverage: 202.1700\tReward: 369.0000Environment Solved!\n"
     ]
    }
   ],
   "source": [
    "running_scores = deque(maxlen=100)\n",
    "score_log = []\n",
    "average_score_log = []\n",
    "\n",
    "\n",
    "t = 0\n",
    "for i in range(num_episodes):\n",
    "    state = env.reset()\n",
    "    steps = 0\n",
    "    score = 0\n",
    "    \n",
    "    while True:\n",
    "        steps += 1\n",
    "            \n",
    "        value = critic(torch.tensor(state).float().to(device))\n",
    "        logits = F.softmax(actor(torch.tensor(state).float().to(device)))\n",
    "        \n",
    "        probabilities = Categorical(logits)\n",
    "        action = probabilities.sample()\n",
    "        log_probs = probabilities.log_prob(action)\n",
    "\n",
    "        next_state, reward, done, _ = env.step(action.cpu().numpy())\n",
    "        score += reward\n",
    "\n",
    "        mem.add(log_probs, value, done, reward)\n",
    "\n",
    "        if (done or steps % bootstrap_len == 0):\n",
    "            update(mem, next_state)\n",
    "            mem.clear()\n",
    "        \n",
    "        if done:\n",
    "            break\n",
    "        \n",
    "        state = next_state\n",
    "\n",
    "    score_log.append(score)\n",
    "    running_scores.append(score)\n",
    "    average_score_log.append(np.mean(running_scores))\n",
    "    \n",
    "    print(\"\\rEpisode: {:.4f}\\taverage: {:.4f}\\tReward: {:.4f}\".format(i, np.mean(running_scores), score), end=\"\")\n",
    "    \n",
    "    if i % 100 == 0:\n",
    "        print(\"\\rEpisode: {:.4f}\\taverage: {:.4f}\\tReward: {:.4f}\".format(i, np.mean(running_scores), score))\n",
    "    \n",
    "    if np.mean(running_scores) > win_condition:\n",
    "        print(\"\\rEnvironment Solved!\")\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f84d0314978>]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(score_log)\n",
    "plt.plot(average_score_log)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
